package com.eliaukjq.xunlianying;

/**
 * @Author : 佩萁
 * Description :
 * @Create : 2024/7/20 - 11:15
 */
public class SynchronizedBlockedExample {
    // 定义一个共享锁对象，用于后续的同步代码块
    private static final Object lock = new Object();

    /**
     * 程序入口主方法
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        // 创建线程1，该线程将获取锁并休眠5秒
        Thread thread1 = new Thread(() -> {
            // 使用同步代码块确保线程安全
            synchronized (lock) {
                try {
                    // 休眠5秒，模拟长时间占用锁的操作
                    Thread.sleep(5000);
                    // 持有锁5秒
                } catch (InterruptedException e) {
                    // 如果线程被中断，重新设置中断状态
                    Thread.currentThread().interrupt();
                }
            }
        });

        // 创建线程2，该线程试图获取锁并打印消息
        Thread thread2 = new Thread(() -> {
            // 使用同步代码块确保线程安全
            synchronized (lock) {
                System.out.println("Thread 2 acquired the lock.");
            }
        });

        // 启动线程1和线程2
        thread1.start();
        thread2.start();
    }
}

